package css.sword.annotation.kafka;

import java.util.Properties;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.apache.kafka.clients.producer.KafkaProducer;

/**
 * 
 *
 * @project 深圳智能政务办公系统
 * @package zhbg.oaxt.common.kafka
 * @file KafkaPool.java 创建时间:2018年12月6日上午10:11:47
 * @title 标题（要求能简洁地表达出类的功能和职责）
 * @description 描述（简要描述类的职责、实现方式、使用注意事项等）
 * @copyright Copyright (c) 2018 中国软件与技术服务股份有限公司
 * @company 中国软件与技术服务股份有限公司
 * @module 模块: 模块名称
 * @author  曹敏
 * @reviewer 审核人
 * @version 1.0
 * @history 修订历史（历次修订内容、修订人、修订时间等）
 *
 */
@SuppressWarnings("rawtypes")
public class KafkaPool extends OAKafkaPool<KafkaProducer> {
    /**
     * 
     *@constructor 构造方法
     *@param config 参数
     *@param properties 参数
     */
    @SuppressWarnings("unchecked")
    public KafkaPool(GenericObjectPoolConfig config, Properties properties) {
        this.internalPool = new GenericObjectPool(new KafkaFactory(properties), config);
    }
    /**
     * 
     *@name    中文名称
     *@description 相关说明
     *@time    创建时间:2018年12月6日上午10:11:56
     *@return 返回值
     *@throws Exception 异常
     * @author   曹敏
     *@history 修订历史（历次修订内容、修订人、修订时间等）
     */
    public KafkaProducer getResource() throws Exception {
        final KafkaProducer kafkaProducer = (KafkaProducer) super.getResource();
        return kafkaProducer;
    }
    /**
     * 
     *@name    中文名称
     *@description 相关说明
     *@time    创建时间:2018年12月6日上午10:12:00
     *@param resource 参数
     *@throws Exception  异常
     * @author   曹敏
     *@history 修订历史（历次修订内容、修订人、修订时间等）
     */
    public void returnBrokenResource(KafkaProducer resource) throws Exception {
        if (resource != null) {
            returnBrokenResourceObject(resource);
        }
    }
    /**
     * 
     *@name    中文名称
     *@description 相关说明
     *@time    创建时间:2018年12月6日上午10:12:27
     *@param resource 参数
     *@throws Exception 异常
     * @author   曹敏
     *@history 修订历史（历次修订内容、修订人、修订时间等）
     */
     
    public void returnResource(KafkaProducer resource) throws Exception {
        if (resource != null) {
            try {
                returnResourceObject(resource);
            } catch (Exception e) {
                returnBrokenResource(resource);
                throw new Exception("Could not return the resource to the pool", e);
            }
        }
    }
    /**
     * 
     *@name    中文名称
     *@description 相关说明
     *@time    创建时间:2018年12月6日上午10:12:35
     *@return  返回值
     *@author   曹敏
     *@history 修订历史（历次修订内容、修订人、修订时间等）
     */
    public int getNumActive() {
        if ((this.internalPool == null) || (this.internalPool.isClosed())) {
            return -1;
        }
        return this.internalPool.getNumActive();
    }
}
